Skip to content

Conversation

@alwinsanil
Copy link

Refactoring of code done to address some design smells and implementation smells.

Implementation smells fixed:

  1. Complex Conditional: getBoolean method in JSONArray.
    Techniques: Extract Method, Decompose Conditional, Introduce Explaining Variable
    • Extract Method - Created isFalse() and isTrue() methods to handle the complex conditionals
    • Decompose Conditional - Broke down the complex if-conditions into simpler methods
    • Introduce Explaining Variable - Used isBooleanString to clarify the string check logic

  2. Complex Conditional: nextTo method in JSONTokener
    Techniques: Extract Method, Decompose Conditional, Introduce Explaining Variable
    • Extract Method - Created isDelimiter() helper methods to encapsulate delimiter checks
    • Decompose Conditional - Broke down complex OR conditions into simpler checks
    • Introduce Explaining Variable - Used isEndOfInput to clarify the zero-character check

  3. Magic Number: toString method in JSONArray
    Techniques: Introduce explaining variable
    • Introduce explaining variable (for magic number 2) - Explain the multiplier purpose
    • Introduce explaining variable (for magic number 16) - Explain minimum buffer size

Design smells fixed:

  1. Deficient Encapsulation in JSONMLParserConfiguration
    Technique: Move Field/Method
  2. Cyclical Dependency between XML and XMLTokener
    Technique: Extract Class
  3. Missing Hierarchy of method similar in JSONArray, JSONObject and JSONString
    Technique: Replace conditional with Polymorphism
  4. Broken Hierarchy between JSONStringer and JSONWriter

@stleary
Copy link
Owner

stleary commented Mar 27, 2025

Please review the FAQ.
Also, refactoring PRs are usually not accepted.

@stleary stleary closed this Mar 27, 2025
@alwinsanil
Copy link
Author

Please review the FAQ. Also, refactoring PRs are usually not accepted.

I have to raise another PR with the same description and purpose as there were some compilation errors in this one. You may review them and accept them if you see fit. Note: This is done as part of a university assignment. You may leave the same comment should you choose to not accept the pull request again.

Thank you and have a good day.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants